package com.yidu.hbats.service;

import com.yidu.hbats.dao.AtsDataBatchMapper;
import com.yidu.hbats.dao.AtsDataMapper;
import com.yidu.hbats.model.AtsData;
import com.yidu.hbats.model.AtsDataBatch;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

/**
 * @program: t272
 * @description: 实现类
 * @author: HJJ
 * @create: 2019-11-14 10:39
 **/
@Service
public class AtsDataTextServiceImp implements AtsDataTextService {

    @Resource
    AtsDataMapper atsDataMapper;

    @Resource
    AtsDataBatchMapper atsDataBatchMapper;

    @Override
    public List<AtsDataBatch> selectAtsKey(Integer athleteId) {
        return atsDataBatchMapper.selectAtsKey(athleteId);
    }

    @Override
    public List<Map<String, Object>> selectItemTu(AtsData ats) {
        //得到一个新的list<Map> mapList 集合
        List<Map<String, Object>> mapList = new ArrayList<>();
        //放主要的对比运动员，以及该指标的标准值
        List<String> ydata = new ArrayList<>();

        List<String> ldata = new ArrayList<>();
        //指标分出来 Integer 数组
        Integer[] itemId1 = ats.getItemId();
        //先把运动员分出来 Integer 数组
        Integer[] ydy = ats.getAthleteIds();
        //循环 指标 int i1
        for (int i1 = 0; i1 < itemId1.length; i1++) {
            //得到一个新的map集合
            Map<String,Object> map = new HashMap<>();
            //将指标先给他 itemId1[i1]
            ats.setItemIds(itemId1[i1]);
            String itemName = null;//定义一个 itemName 指标名的String
            String itemUnit = null;//定义一个 itemUnit 指标名的String
            //定义一个 list<Map> listMap 集合
            List<Map<String,Object>> listMap = new ArrayList<>();
            //循环运动员的数组 int i
            for (int i = 0; i < ydy.length; i++) {
                //定义一个新的 map2集合
                Map<String, Object> map2 = new HashMap<>();
                String trueName = null;//真实姓名的值
                ats.setAthleteId(ydy[i]);//将运动员id分别给他 ydy[i]
                //得到一个 Double 类型的 list 集合
                List<Double> listOne = new ArrayList<>();
                //得到 批次名字 ats Choice
                String[] pici = ats.getChoiceOne();
                //如果 ydy数组的长度为1 就排序 Array
                if(ydy.length == 1){
                    Arrays.sort(pici);
                }
                //循环批次 int k
                for (int k = 0; k < pici.length; k++) {
                    //如果i== k 或者 运动员数组的长度 ==1
                    if (i == k || ydy.length == 1) {
                        //根据,批次 来分隔批次 one2
                        String[] one2 = pici[k].split(",");
                        //先分了 组 在排序one2 ,数据库中应该一致
                        Arrays.sort(one2);
                        //循环 one2 int j
                        for (int j = 0; j < one2.length; j++) {
                            //如果one2[j]为空 就跳出本次循环
                            if(one2[j].equals("")){
                                continue;
                            }
                            //依次给批次 给到 ats 批次ID
                            ats.setBatchId(Integer.valueOf(one2[j]));
                            //根据 ats 查出内容
                            AtsData atsd = atsDataMapper.selectItemTu2(ats);//查出数据

                            //如果 为空就退出循环
                            if(atsd == null){
                               continue;
                            }
                            trueName = atsd.getAthleteName();//不为空 就只接赋值 运动员名字
                            itemName = atsd.getItemName();//指标名字
                            itemUnit = atsd.getItemUnit();//itemUnit
                            //将运动员名字加入到list集合
                            ydata.add(atsd.getAthleteName());//运动员名放入ydata集合
                            removeDuplicate(ydata);//去除重复运动员后的 ydata集合
                            ldata.add("第"+atsd.getBatchName()+"批次");//批次名放入 ldata集合
                            removeDuplicate(ldata);//去remove重后 批次的 ldata
                            //循环ldata 集合 int o
                            for(int o=0;o<ldata.size();o++){
                                //得到其所对应的 Stirng get(o)
                                String shuJu = ldata.get(o);
                                //如果listOne 的大小不等于 ldata 的大小
                                if(listOne.size() != ldata.size()){
                                    //就listOne添加null
                                    listOne.add(null);
                                }
                                //如果Shuju 和 批次名字对比  成功
                                if(shuJu.equals("第"+atsd.getBatchName()+"批次")){
                                    //就替换掉list集合中的 o 位置的内容 atsd.getv
                                    listOne.set(o,atsd.getValueFact());
                                }
                            }
                        }
                    }
                }
                //将name trueName 放入到map2集合中
                map2.put("name",trueName);
                // 将 type bar 放入到map2 集合中
                map2.put("type","bar");
                // data listOne 放入到 map2 集合中
                map2.put("data",listOne);
                //将 map2集合 添加到 listMap 集合中
                listMap.add(map2);

            }

            removeDuplicate(ydata);//去除 ydata 的重复数据
            map.put("itemName",itemName);
            map.put("itemUnit",itemUnit);
            map.put("ydata",ydata);
            map.put("ldata",ldata);
            map.put("dataAll",listMap);

            mapList.add(map);
        }
        return mapList;
    }

    @Override
    public List<AtsData> selectTest() {

        return atsDataMapper.selectTest();
    }







    /**
     * 去除重复数据
     *
     * @param list
     * @return
     */
    public static List removeDuplicate(List list) {
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = list.size() - 1; j > i; j--) {
                if (list.get(j).equals(list.get(i))) {
                    list.remove(j);
                }
            }
        }
        return list;
    }

}
